/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package lab1;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Lucas
 */
public class Pessoa {

    private String nome;
    private int idade;
    private char sexo;
    private Pessoa conjuge;
    private Pessoa mae;
    private Pessoa pai;
    private List<Pessoa> filhos = new ArrayList<Pessoa>();

    public Pessoa(String nome, int idade, char sexo) {
        this.nome = nome;
        this.idade = idade;
        this.sexo = sexo;
    }

    public List<Pessoa> getIrmaos() {
    	List<Pessoa> irmaos = new ArrayList<Pessoa>();
    	List<Pessoa> filhosMae = mae.getFilhos();
    	List<Pessoa> filhosPai = pai.getFilhos();
    	
    	for(int i = 0;i<filhosMae.size();i++) {
    		if(!irmaos.contains(mae.getFilhos().get(i))) {
    			irmaos.add(mae.getFilhos().get(i));
    		}   		
    	}
    	for(int i=0;i<filhosPai.size();i++) {
    		if(!irmaos.contains(pai.getFilhos().get(i))) {
    			irmaos.add(pai.getFilhos().get(i));
    		}
    	}
    	irmaos.remove(this);
    	return irmaos;
    }
    
    public List<Pessoa> getTios() {
    	List<Pessoa> tios = new ArrayList<Pessoa>();
    	tios.addAll(mae.getIrmaos());
    	tios.addAll(pai.getIrmaos());
    	return tios;
    }
    
    public List<Pessoa> getPrimos() {
        List<Pessoa> primos = new ArrayList<Pessoa>();
        /*Adiciona primos maternos */
        for(int i=0;i<mae.getIrmaos().size();i++) {
        	primos.addAll(mae.getIrmaos().get(i).getFilhos());
        }
        /* Adiciona primos maternos */
        for(int i=0;i<pai.getIrmaos().size();i++) {
        	primos.addAll(pai.getIrmaos().get(i).getFilhos());
        }
    	
        return primos;
    }
    
    public List<Pessoa> getNetos() {
    	List<Pessoa> netos = new ArrayList<Pessoa>();
    	for(int i = 0;i<this.getFilhos().size();i++) {
    		netos.addAll(this.getFilhos().get(i).getFilhos());
    	}
    	return netos;
    }

    public List<Pessoa> getFilhos() {
        return filhos;
    }

    public void addFilho(Pessoa filho) {
        this.filhos.add(filho);
    }

    public boolean casar(Pessoa pessoa1) {
        if (pessoa1.getSexo() != this.sexo && this.idade >= 18 && pessoa1.getIdade() >= 18) {
            this.conjuge = pessoa1;
            return true;
        } else {
            return false;
        }
    }

    public Pessoa getMae() {
        return this.mae;
    }

    public void setMae(Pessoa mae) {
        this.mae = mae;
    }

    public Pessoa getPai() {
        return this.pai;
    }

    public void setPai(Pessoa pai) {
        this.pai = pai;
    }

    public Pessoa getConjuge() {
        return this.conjuge;
    }

    public int getIdade() {
        return idade;
    }

    public void setIdade(int idade) {
        this.idade = idade;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public char getSexo() {
        return sexo;
    }

    public void setSexo(char sexo) {
        this.sexo = sexo;
    }
}
